/******************************************************************************************
Copyright(C), 2019-2020, Linyar.
文件名：L_MPP40_vgs.c
作者：燕卫博	版本：V1.0	创建日期：2021.6.7
文件描述：
    VGS部分操作。
版本信息：
    9Hv2，个人。
历史修改记录：
1. 2021-6-7:V1.0 燕卫博
创建。

2. 2021-8-11:V1.0 燕卫博
从9Hv1拷贝，接续使用。

3. 2021-11-21:V1.0 燕卫博
修复了VGS画框逻辑存在的BUG，该BUG导致最终的显示图像上仅有一个检测框。
******************************************************************************************/
//                                              ↓
//+------------------------------------------------------------------------------------------+
//|                                         头文件包含
//+------------------------------------------------------------------------------------------+
/*|*/  #include "L_MPP40_vgs.h"
/*|*/  #include "L_MPP40_debug.h"
//+------------------------------------------------------------------------------------------+

//+------------------------------------------------------------------------------------------+
//|  函数名称：VGS_AddCover
//|  功能描述：在图像上绘制边框
//|  参数说明：VIDEO_FRAME_INFO_S结构体指针，VGS_RECT数组地址和Rect数量
//|  返回值说明：成功返回0
//|  备注：
//+------------------------------------------------------------------------------------------+
int L_VGS_AddCover(VIDEO_FRAME_INFO_S *pstFrmInfo, const VGS_RECT *pstRect, HI_U32 RectNum, HI_U32 u32Color)
{
    HI_S32 s32Ret = HI_SUCCESS;
    VGS_HANDLE VgsHandle = -1;
    VGS_TASK_ATTR_S stVgsTask;
    VGS_ADD_COVER_S stVgsAddCover;

    /* 传参检查 */
    if(pstFrmInfo == NULL || pstRect == NULL || RectNum == 0){LOGE("[MPP-VGS-ERROR]Parameters error!\n");return -1;}

    /* 启动VGS任务 */
    s32Ret = HI_MPI_VGS_BeginJob(&VgsHandle);
    if(s32Ret != HI_SUCCESS){LOGE("[MPP-VGS-ERROR]HI_MPI_VGS_BeginJob failed with %#x!\n", s32Ret);return -1;}

    memcpy(&stVgsTask.stImgIn, pstFrmInfo, sizeof(VIDEO_FRAME_INFO_S));
    memcpy(&stVgsTask.stImgOut, pstFrmInfo, sizeof(VIDEO_FRAME_INFO_S));

    stVgsAddCover.enCoverType = COVER_QUAD_RANGLE;
    stVgsAddCover.u32Color = u32Color;
    stVgsAddCover.stQuadRangle.bSolid = HI_FALSE;
    stVgsAddCover.stQuadRangle.u32Thick = 4;

    for(int i = 0; i < RectNum; i++)
    {
        memcpy(stVgsAddCover.stQuadRangle.stPoint, pstRect[i].astPoint, sizeof(pstRect[i].astPoint));
        s32Ret = HI_MPI_VGS_AddCoverTask(VgsHandle, &stVgsTask, &stVgsAddCover);
        if(s32Ret != HI_SUCCESS)
        {
            LOGE("[MPP-VGS-ERROR]HI_MPI_VGS_AddCoverTask failed with %#x!\n", s32Ret);
            HI_MPI_VGS_CancelJob(VgsHandle);
            return -2;
        }
    }

    s32Ret = HI_MPI_VGS_EndJob(VgsHandle);
    if(s32Ret != HI_SUCCESS)
    {
        LOGE("[MPP-VGS-ERROR]HI_MPI_VGS_EndJob failed with %#x!\n", s32Ret);
        HI_MPI_VGS_CancelJob(VgsHandle);
        return -3;
    }

    return 0;
}
